activiti和设计模式(8)
BPMN中不仅规定了每一个图标代表的意义,例如:
而且还规定了每一个每一图形的行为标准,在Activiti中动作行为封装在了ActivityBehavior中,在ActivityBehavior中,不仅封装的有行为,线上的条件的判断。
首先是ActivityBehavior的构建,采用的是简单工厂的设计模式:
public interface ActivityBehaviorFactory {
public abstract NoneStartEventActivityBehavior createNoneStartEventActivityBehavior(StartEvent startEvent);
public abstract EventSubProcessStartEventActivityBehavior createEventSubProcessStartEventActivityBehavior(StartEvent startEvent, String activityId);
public abstract TaskActivityBehavior createTaskActivityBehavior(Task task);
public abstract ManualTaskActivityBehavior createManualTaskActivityBehavior(ManualTask manualTask);
public abstract ReceiveTaskActivityBehavior createReceiveTaskActivityBehavior(ReceiveTask receiveTask);
public abstract UserTaskActivityBehavior createUserTaskActivityBehavior(UserTask userTask, TaskDefinition taskDefinition);
public abstract ClassDelegate createClassDelegateServiceTask(ServiceTask serviceTask);
public abstract ServiceTaskDelegateExpressionActivityBehavior createServiceTaskDelegateExpressionActivityBehavior(ServiceTask serviceTask);
public abstract ServiceTaskExpressionActivityBehavior createServiceTaskExpressionActivityBehavior(ServiceTask serviceTask);
public abstract WebServiceActivityBehavior createWebServiceActivityBehavior(ServiceTask serviceTask);
public abstract WebServiceActivityBehavior createWebServiceActivityBehavior(SendTask sendTask);
public abstract MailActivityBehavior createMailActivityBehavior(ServiceTask serviceTask);
public abstract MailActivityBehavior createMailActivityBehavior(SendTask sendTask);
// We do not want a hard dependency on the Mule module, hence we return ActivityBehavior and instantiate
// the delegate instance using a string instead of the Class itself.
public abstract ActivityBehavior createMuleActivityBehavior(ServiceTask serviceTask, BpmnModel bpmnModel);
public abstract ActivityBehavior createMuleActivityBehavior(SendTask sendTask, BpmnModel bpmnModel);
public abstract ActivityBehavior createCamelActivityBehavior(ServiceTask serviceTask, BpmnModel bpmnModel);
public abstract ActivityBehavior createCamelActivityBehavior(SendTask sendTask, BpmnModel bpmnModel);
public abstract ShellActivityBehavior createShellActivityBehavior(ServiceTask serviceTask);
public abstract ActivityBehavior createBusinessRuleTaskActivityBehavior(BusinessRuleTask businessRuleTask);
public abstract ScriptTaskActivityBehavior createScriptTaskActivityBehavior(ScriptTask scriptTask);
public abstract ExclusiveGatewayActivityBehavior createExclusiveGatewayActivityBehavior(ExclusiveGateway exclusiveGateway);
public abstract ParallelGatewayActivityBehavior createParallelGatewayActivityBehavior(ParallelGateway parallelGateway);
public abstract InclusiveGatewayActivityBehavior createInclusiveGatewayActivityBehavior(InclusiveGateway inclusiveGateway);
public abstract EventBasedGatewayActivityBehavior createEventBasedGatewayActivityBehavior(EventGateway eventGateway);
public abstract SequentialMultiInstanceBehavior createSequentialMultiInstanceBehavior(ActivityImpl activity, AbstractBpmnActivityBehavior innerActivityBehavior);
public abstract ParallelMultiInstanceBehavior createParallelMultiInstanceBehavior(ActivityImpl activity, AbstractBpmnActivityBehavior innerActivityBehavior);
public abstract SubProcessActivityBehavior createSubprocActivityBehavior(SubProcess subProcess);
public abstract CallActivityBehavior createCallActivityBehavior(CallActivity callActivity);
public abstract TransactionActivityBehavior createTransactionActivityBehavior(Transaction transaction);
public abstract IntermediateCatchEventActivityBehavior createIntermediateCatchEventActivityBehavior(IntermediateCatchEvent intermediateCatchEvent);
public abstract IntermediateThrowNoneEventActivityBehavior createIntermediateThrowNoneEventActivityBehavior(ThrowEvent throwEvent);
public abstract IntermediateThrowSignalEventActivityBehavior createIntermediateThrowSignalEventActivityBehavior(ThrowEvent throwEvent, Signal signal, EventSubscriptionDeclaration eventSubscriptionDeclaration);
public abstract IntermediateThrowCompensationEventActivityBehavior createIntermediateThrowCompensationEventActivityBehavior(ThrowEvent throwEvent, CompensateEventDefinition compensateEventDefinition);
...........
}
默认的实现是:
public class DefaultActivityBehaviorFactory extends AbstractBehaviorFactory implements ActivityBehaviorFactory {
// Start event
public final static String EXCEPTION_MAP_FIELD = "mapExceptions";
public NoneStartEventActivityBehavior createNoneStartEventActivityBehavior(StartEvent startEvent) {
return new NoneStartEventActivityBehavior();
}
public EventSubProcessStartEventActivityBehavior createEventSubProcessStartEventActivityBehavior(StartEvent startEvent, String activityId) {
return new EventSubProcessStartEventActivityBehavior(activityId);
}
// Task
public TaskActivityBehavior createTaskActivityBehavior(Task task) {
return new TaskActivityBehavior();
}
...........
}
我们在「activiti和设计模式(7)」 中定义的usertask是多实例的,所以对应的Behavior是:
- 上一篇 activiti和设计模式(7)
- 下一篇 复习算法和数据结构(1)